Lower Bounded Wildcards (<? super T>) জাভা জেনেরিক্সের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি ব্যবহার করা হয় এমন ডেটা টাইপের জন্য যেখানে প্যারামিটারাইজড টাইপটি T বা T-এর সুপারক্লাস হতে পারে।
Lower Bounded Wildcards কী?
<? super T> নির্দেশ করে যে জেনেরিক টাইপটি T বা তার যেকোনো সুপারক্লাস হতে পারে। এটি সাধারণত write operations (ডেটা ইনসার্ট) এর ক্ষেত্রে ব্যবহৃত হয়।
Lower Bounded Wildcards এর সিনট্যাক্স
<? super T>
- এখানে
Tহল টাইপ প্যারামিটার। - এটি
TএবংT-এর সুপারক্লাসগুলিকে গ্রহণ করে।
Lower Bounded Wildcards কেন ব্যবহার করা হয়?
- Write Operations সহজ করতে:
Lower Bounded Wildcards ডেটা ইনসার্টের জন্য সুবিধাজনক, কারণ এটি নিশ্চিত করে যে অবজেক্টটি উপযুক্ত টাইপ বা তার সুপারক্লাসের হবে। - ইনহেরিটেন্স সংক্রান্ত সীমাবদ্ধতা দূর করতে:
এটি ব্যবহার করে আপনি এমন জেনেরিক ডেটা স্ট্রাকচার তৈরি করতে পারেন যা নির্দিষ্ট টাইপ এবং তার সুপারক্লাস উভয়ের সাথে কাজ করতে পারে।
উদাহরণ: Lower Bounded Wildcards
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void addElements(List<? super Integer> list) {
list.add(10);
list.add(20);
list.add(30);
// list.add("String"); // Compile-time error: Only Integer or its superclass is allowed
}
public static void main(String[] args) {
List<Number> numbers = new ArrayList<>();
addElements(numbers);
List<Object> objects = new ArrayList<>();
addElements(objects);
System.out.println(numbers);
System.out.println(objects);
}
}
আউটপুট:
[10, 20, 30]
[10, 20, 30]
Lower Bounded Wildcards এর বৈশিষ্ট্য
- Write Operations:
- আপনি
Tবা তার সাবটাইপ যোগ করতে পারেন। উদাহরণ:
public void addNumbers(List<? super Integer> list) { list.add(10); // Allowed list.add(15); // Allowed }
- আপনি
- Read Operations সীমাবদ্ধ:
- ডেটা পড়ার সময় টাইপ ইনফরমেশন হারিয়ে যায়, তাই Object হিসাবে ডেটা রিটার্ন হয়।
উদাহরণ:
List<? super Integer> list = new ArrayList<>(); list.add(10); Object obj = list.get(0); // Returns Object, not Integer
- Type Compatibility:
<? super T>শুধুমাত্রTএবং তার সুপারক্লাসের সাথে কাজ করে। এটি সাবটাইপগুলির ক্ষেত্রে কার্যকর নয়।
Lower Bounded Wildcards এবং Collections Framework
Lower Bounded Wildcards সাধারণত Collections Framework-এ ব্যবহৃত হয় যেখানে write-heavy অপারেশন দরকার।
উদাহরণ: Collections.sort() এর Lower Bounded Wildcard
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> intList = Arrays.asList(3, 1, 4, 2);
List<Number> numberList = Arrays.asList(3, 1.5, 4, 2.0);
// Sort Integer List
sortList(intList);
System.out.println(intList);
// Sort Number List
sortList(numberList);
System.out.println(numberList);
}
public static void sortList(List<? super Integer> list) {
list.sort(null); // Uses natural ordering
}
}
আউটপুট:
[1, 2, 3, 4]
[1.5, 2.0, 3, 4]
Lower Bounded Wildcards বনাম Upper Bounded Wildcards
| বৈশিষ্ট্য | Lower Bounded Wildcards (<? super T>) | Upper Bounded Wildcards (<? extends T>) |
|---|---|---|
| রিড অপারেশন | Object টাইপ রিটার্ন করে। | নির্দিষ্ট টাইপ বা তার সাবক্লাস রিটার্ন করে। |
| রাইট অপারেশন | Write-heavy অপারেশন সহজ করে। | Write অপারেশন সীমাবদ্ধ। |
| ইনহেরিটেন্স | T এবং তার সুপারক্লাসের সাথে কাজ করে। | T এবং তার সাবক্লাসের সাথে কাজ করে। |
Lower Bounded Wildcards এর সুবিধা
- টাইপ সেফ ডেটা ইনসার্ট:
নির্দিষ্ট টাইপ বা তার সুপারক্লাস ছাড়া অন্য কোনো টাইপ ইনসার্ট করা যাবে না। - ইনহেরিটেন্সের সমস্যা সমাধান:
Tএবং তার সুপারক্লাস উভয়ের জন্য একই মেথড ব্যবহার করা সম্ভব। - Flexible কোড:
একাধিক টাইপের জন্য একক জেনেরিক মেথড বা ক্লাস ব্যবহার করা যায়।
Lower Bounded Wildcards এর সীমাবদ্ধতা
- Read Operations সীমিত:
টাইপ ইনফরমেশন লোপ পায়, ফলে Object টাইপে ডেটা রিটার্ন হয়। - Type Compatibility আরও সুনির্দিষ্ট হতে পারে:
সব টাইপের সাথে কাজ করে না, শুধুমাত্র সুপারক্লাস বা নির্দিষ্ট টাইপের সাথে কাজ করে।
সংক্ষেপে
- Lower Bounded Wildcards (
<? super T>) এমন ডেটা টাইপ গ্রহণ করে যাTবা তার সুপারক্লাস হতে পারে। - এটি সাধারণত write-heavy অপারেশনের জন্য ব্যবহৃত হয়।
- Collections Framework এবং Generics-সমৃদ্ধ কোডে Lower Bounded Wildcards খুব কার্যকরী।
Generics-এর এই বৈশিষ্ট্যটি টাইপ সেফটি এবং কোড রিইউজেবিলিটির জন্য অত্যন্ত গুরুত্বপূর্ণ।
Content added By
Read more